"""
该文件为第二类算法的函数调用示例
"""
from Process import clean_sort
from Process import clean_normal
from Process import clean_drop
from Process import clean_merge
from Process import clean_replace
from Process import change_type
from Process import change_timeFreq
from Process import drop_clean
from Process import drop_sum
from Algorithm import CNN

with open("test_data/test.txt") as file_obj:
    print(file_obj.read())

print("\n排序函数")
# 排序函数
# 这里正序排序筛选1-10间的数
output = clean_sort.clean_sort("test_data/test.txt", [1, 10], 0)
print(output)

print("\n归一化函数")
# 归一化函数
# 这里使用线性函数归一化
# 归一化是什么？https://blog.csdn.net/program_developer/article/details/78637711
output = clean_normal.clean_normal("test_data/test.txt", 0)
print(output)

print("\n降采样函数")
# 降采样函数
# 按compression_ratio的比例压缩信号，这里压缩比例为2
output = clean_drop.clean_drop("test_data/test.txt", 2)
print(output)

print("\n合并函数")
# 合并函数
# 这里使用inner方式合并两个文件中的数组，注：文件的数据类型必须一致
# 什么是inner方式？https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.merge.html
output = clean_merge.clean_merge("test_data/test.txt", "test_data/test_3.txt", 0)
print(output)

print("\n替代函数")
# 替代函数
# 使用替代字典中的键值对替代文件中的数据，这里把“”替代为1.2，把0替代为1.5，把1替代为2.5
output = clean_replace.clean_replace("test_data/test.txt", {'': 1.2, 0: 1.5, 1: 2.5})
print(output)

print("\n类型转化函数")
# 类型转化函数
# 改变文件中数据的数据类型，这里把int改成float
output = change_type.change_type("test_data/test.txt", 0)
print(output)

print("\n时频域分析函数")
# 时频域分析函数
# 这里时域转化为频域，采样间隔为1秒
# 输出为json格式，after为振幅，after_freq的物理意义随transformation_form而变化，详见函数内部注释
output = change_timeFreq.change_timeFreq("test_data/test.txt", 0, 1)
print(output)

print("\n清洗降维函数")
# 清洗降维函数
# 这里取前10个数据以压缩比例2降维，输出10/2=5个数据（降维采用KMeans方法）
# 什么是KMeans，如何降维？https://zhuanlan.zhihu.com/p/74902766
output = drop_clean.drop_clean("test_data/test.txt", 10, 2)
print(output)

print("\n汇总降维函数")
# 汇总降维函数
# 这里按均值压缩，压缩比例为2
output = drop_sum.drop_sum("test_data/test.txt", 2, 0)
print(output)

print("\nmodel调用函数")
# 这里input_file的输入必须为长度为784的一维数组，即test_4.txt的文件
output = CNN.test_predict("test_data/test_4.txt", "model/test_model")
print(output)
